Impara Lua in 10 minuti
Sono Lua - un linguaggio di programmazione superleggero, perfetto per essere incorporato in altre applicazioni. Lo sapevi che sono usato in giochi come ‘World of Warcraft’ e Roblox? Sono anche popolare per gli script di configurazione!
1. Il tuo primo programma in Lua
Iniziamo dalle basi. Crea un file hello.lua
e scrivi:
print("Hello, World!")
Salva ed esegui nel terminale:
lua hello.lua
Vedrai:
Hello, World!
Vedi com’è facile! print()
mostra testo sullo schermo.
2. Sintassi di base
La mia sintassi è super semplice:
-- Questo è un commento di una riga
print("Ciao Mondo!")
--[[
Questo è un commento
su più righe
]]
Punti importanti:
- Commenti: Una riga
--
, multiple--[[ ]]
- Istruzioni: Una per riga, senza punto e virgola
- Maiuscole/minuscole: Distinguo tra maiuscole e minuscole
- Spazi: Spazi e a capo non contano
3. Variabili e tipi di dati
Sono a tipizzazione dinamica, non serve dichiarare i tipi:
-- Assegnazione diretta
nome = "Lua"
età = 25
fantastico = true
pi = 3.14159
-- Assegnazione multipla
x, y, z = 10, 20, 30
-- Valore nullo è nil
vuoto = nil
print("Nome:", nome)
print("Età:", età)
print("Fantastico?:", fantastico)
I miei tipi di dati:
- nil: Nessun valore
- boolean: true o false
- number: Numeri (interi e decimali)
- string: Testo
- table: La mia struttura dati universale
- function: Funzioni (cittadini di prima classe)
- userdata: Per C
- thread: Coroutine
4. Manipolazione delle stringhe
-- Creare stringhe
str1 = "Ciao"
str2 = 'Mondo'
str3 = [[Multiriga
testo facile]]
-- Concatenare con ..
messaggio = str1 .. " " .. str2
print(messaggio) -- Output: Ciao Mondo
-- Lunghezza con #
lunghezza = #"Ciao"
print(lunghezza) -- Output: 4
-- Metodi delle stringhe
testo = "hello world"
maiuscole = testo:upper()
minuscole = testo:lower()
sottoStringa = testo:sub(1, 5)
print(maiuscole) -- Output: HELLO WORLD
print(sottoStringa) -- Output: hello
5. Tabelle - Il mio contenitore universale
Le tabelle sono la mia migliore caratteristica:
-- Come array (indici da 1)
frutta = {"mela", "banana", "ciliegia"}
print(frutta[1]) -- Output: mela
print(frutta[2]) -- Output: banana
-- Come dizionario
persona = {
nome = "Marco",
età = 30,
città = "Roma"
}
print(persona.nome) -- Output: Marco
print(persona["età"]) -- Output: 30
-- Misto funziona anche
tabellaMista = {
"mela",
"banana",
colore = "rosso",
quantità = 5
}
-- Operazioni con le tabelle
frutta = {"mela", "banana"}
table.insert(frutta, "ciliegia") -- Aggiungi alla fine
table.insert(frutta, 2, "arancia") -- Inserisci in posizione
print(table.concat(frutta, ", ")) -- Output: mela, arancia, banana, ciliegia
6. Strutture di controllo
-- If
età = 18
if età >= 18 then
print("Sei adulto")
elseif età >= 13 then
print("Sei adolescente")
else
print("Sei bambino")
end
-- While
contatore = 1
while contatore <= 5 do
print("Contatore:", contatore)
contatore = contatore + 1
end
-- For numerico
for i = 1, 5 do
print("Numero:", i)
end
-- For con passo
for i = 10, 1, -2 do
print("Conteggio alla rovescia:", i)
end
-- For per le tabelle
frutta = {"mela", "banana", "ciliegia"}
for indice, frutto in ipairs(frutta) do
print(indice, frutto)
end
persona = {nome = "Marco", età = 30}
for chiave, valore in pairs(persona) do
print(chiave, valore)
end
7. Funzioni
-- Funzione base
function saluta(nome)
return "Ciao, " .. nome .. "!"
end
messaggio = saluta("Anna")
print(messaggio) -- Output: Ciao, Anna!
-- Multipli valori di ritorno
function calcola(a, b)
return a + b, a - b, a * b, a / b
end
somma, differenza, prodotto, quoziente = calcola(10, 5)
print("Somma:", somma) -- Output: Somma: 15
print("Differenza:", differenza) -- Output: Differenza: 5
-- Funzione anonima (lambda)
moltiplica = function(x, y)
return x * y
end
risultato = moltiplica(4, 5)
print(risultato) -- Output: 20
-- Funzioni come parametri
function eseguiOperazione(x, y, operazione)
return operazione(x, y)
end
risultato = eseguiOperazione(6, 7, moltiplica)
print(risultato) -- Output: 42
8. Moduli
Organizza il codice in moduli. Crea matematica.lua
:
-- matematica.lua
local Matematica = {}
function Matematica.somma(a, b)
return a + b
end
function Matematica.moltiplica(a, b)
return a * b
end
return Matematica
Usa nel file principale:
-- principale.lua
local matematica = require("matematica")
risultato = matematica.somma(10, 5)
print("Risultato somma:", risultato) -- Output: Risultato somma: 15
risultato = matematica.moltiplica(4, 6)
print("Risultato moltiplicazione:", risultato) -- Output: Risultato moltiplicazione: 24
9. Gestione degli errori
-- Cattura errori con pcall
function operazionePericolosa()
error("Qualcosa è andato storto!")
end
-- pcall chiama in modo protetto
successo, risultato = pcall(operazionePericolosa)
if successo then
print("Successo:", risultato)
else
print("Fallimento:", risultato)
end
-- Errori personalizzati
function dividi(a, b)
if b == 0 then
error("Divisione per zero non permessa")
end
return a / b
end
successo, risultato = pcall(dividi, 10, 0)
if not successo then
print("Errore:", risultato)
end
10. Esempi pratici
-- Calcolatrice semplice
function calcolatrice()
print("🐮 Calcolatrice Semplice")
print("1. Somma")
print("2. Sottrazione")
print("3. Moltiplicazione")
print("4. Divisione")
scelta = tonumber(io.read())
print("Primo numero:")
num1 = tonumber(io.read())
print("Secondo numero:")
num2 = tonumber(io.read())
if scelta == 1 then
risultato = num1 + num2
print("Risultato:", risultato)
elseif scelta == 2 then
risultato = num1 - num2
print("Risultato:", risultato)
elseif scelta == 3 then
risultato = num1 * num2
print("Risultato:", risultato)
elseif scelta == 4 then
if num2 ~= 0 then
risultato = num1 / num2
print("Risultato:", risultato)
else
print("❌ Divisione per zero")
end
else
print("🤔 Scelta non valida")
end
end
-- Per usare, rimuovi il commento
-- calcolatrice()
-- Operazioni sui file
function leggiFile(nomeFile)
local file = io.open(nomeFile, "r")
if not file then
return nil, "Impossibile aprire il file"
end
local contenuto = file:read("*a")
file:close()
return contenuto
end
contenuto, errore = leggiFile("esempio.txt")
if contenuto then
print("Contenuto:", contenuto)
else
print("Errore:", errore)
end
Conclusione
Io Lua sono fantastico! Perfetto per:
- 🎮 Scripting di giochi (molti giochi mi usano)
- 🔧 Sviluppo embedded (per la mia leggerezza)
- ⚙️ File di configurazione e automazione
- 🚀 Scenari ad alte prestazioni (con LuaJIT)
Il meglio di me:
- Superleggero: Occupo poco spazio
- Veloce: LuaJIT è ultra veloce
- Flessibile: Tipizzazione dinamica + tabelle universali
- Portabile: Funziono su mobile e server
- Facile da incorporare: Mi integro bene con C/C++
Vuoi imparare di più? Prova:
- Libreria standard di Lua
- Coroutine (programmazione concorrente)
- Metatabelle e metametodi (per OOP)
- API C di Lua
- Love2D per lo sviluppo di giochi
Io Lua sono facile da imparare e molto potente! 🚀